Python:sklearn数据预处理中fit(),transform()与fit

您所在的位置:网站首页 fit与fit into Python:sklearn数据预处理中fit(),transform()与fit

Python:sklearn数据预处理中fit(),transform()与fit

2024-07-10 13:39| 来源: 网络整理| 查看: 265

一.前提

sklearn里的封装好的各种算法使用前都要fit,fit相对于整个代码而言,为后续API服务。fit之后,然后调用各种API方法,transform只是其中一个API方法,所以当你调用transform之外的方法,也必须要先fit。

二.比较

1.有监督学习的算法fit(x,y)传两个参数。无监督学习的算法是fit(x),即传一个参数,比如降维、特征提取、标准化。 2.fit_transform是fit和transform的组合。是将fit和transform合并,一步到位的结果。 3.fit_transform()的作用就是先拟合数据,然后转化它将其转化为标准形式。 4.tranform()的作用是通过找中心和缩放等实现标准化。 5.注意这是数据预处理中的方法: Fit(): Method calculates the parameters μ and σ and saves them as internal objects. 解释:简单来说,就是求得训练集X的均值啊,方差啊,最大值啊,最小值啊,这些训练集X固有的属性。可以理解为一个训练过程 Transform(): Method using these calculated parameters apply the transformation to a particular dataset. 解释:在Fit的基础上,进行标准化,降维,归一化等操作(看具体用的是哪个工具,如PCA,StandardScaler等)。 Fit_transform(): joins the fit() and transform() method for transformation of dataset. 解释:fit_transform是fit和transform的组合,既包括了训练又包含了转换。

from sklearn.preprocessing import StandardScaler import pandas as pd import numpy as py data=pd.DataFrame(py.arange(6).reshape(2,3)) print("数据展示:\n",data) print("数据标准化,使用fit_transform") s=StandardScaler(); x_train=s.fit_transform(data) print(x_train) print("数据标准化,先使用fit,后transform") s2=StandardScaler(); t=s2.fit(data); print("fit的结果:",t) x2_train=s2.transform(data) print(x2_train)

数据展示:     0  1  2 0  0  1  2 1  3  4  5 数据标准化,使用fit_transform [[-1. -1. -1.]  [ 1.  1.  1.]] 数据标准化,先使用fit,后transform fit的结果: StandardScaler(copy=True, with_mean=True, with_std=True) [[-1. -1. -1.]  [ 1.  1.  1.]]

三.相同点

1.transform()和fit_transform()二者的功能都是对数据进行某种统一处理(比如标准化~N(0,1),   将数据缩放(映射)到某个固定区间,归一化,正则化等) 2.fit_transform(trainData)对部分数据先拟合fit,找到部分数据的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),   然后对该trainData进行转换transform,从而实现数据的标准化、归一化等等。   根据对之前部分trainData进行fit的整体指标,对剩余的数据(testData)使用同样的均值、方差、最大最小值等指标进行转换transform(testData),   从而保证train、test处理方式相同。所以,一般都是这么用。 from sklearn.preprocessing import StandardScaler sc = StandardScaler() sc.fit_tranform(X_train) sc.tranform(X_test)

四.注意点

必须先用fit_transform(trainData),之后再transform(testData) 如果直接transform(testData),程序会报错 如果fit_transfrom(trainData)后,使用fit_transform(testData)而不使用transform(testData),虽然也能归一化, 但是两个结果不是在同一个“标准”下的,具有明显差异。(一定要避免这种情况)。

五.为何训练集使用fit_transform(),而测试集使用tranform(),不再使用fit_transform();

是因为在trainData的时候,已经使用fit()或者fit_transform得到了整体的指标(均值,方差等),所以在测试集上直接transform(),使用之前的指标, 如果在测试集上再进行fit(),由于两次的数据不一样,导致得到不同的指标,会使预测发生偏差, 因为模型是针对之前的数据fit()出来的标准来训练的,而现在的数据是新的标准,会导致预测的不准确。

fit_transform()干了两件事:fit找到数据转换规则,并将数据标准化 transform:是将数据进行转换,比如数据的归一化和标准化,将测试数据按照训练数据同样的模型进行转换,得到特征向量。 可以直接把转换规则拿来用,所以并不需要fit_transform(),否则,两次标准化后的数据格式(或者说数据参数)就不一样了

六.具体各种算法的fit(),tranform()

1. CountVectorizer举例,sklearn的CountVectorizer库是根据输入数据获取词频矩阵(稀疏矩阵)     fit(raw_documents) :根据CountVectorizer参数规则进行操作,比如滤除停用词等,拟合原始数据,生成文档中有价值的词汇表;     transform(raw_documents):使用符合fit的词汇表或提供给构造函数的词汇表,从原始文本文档中提取词频,转换成词频矩阵。     fit_transform(raw_documents, y=None):学习词汇词典并返回术语 - 文档矩阵(稀疏矩阵)。 2. TfidfTransformer举例,TF-IDF(Term frequency * Inverse Doc Frequency)词权重

   在较低的文本语料库中,一些词非常常见(例如,英文中的“the”,“a”,“is”),因此很少带有文档实际内容的有用信息。    如果我们将单纯的计数数据直接喂给分类器,那些频繁出现的词会掩盖那些很少出现但是更有意义的词的频率。    为了重新计算特征的计数权重,以便转化为适合分类器使用的浮点值,通常都会进行tf-idf转换。    词重要性度量一般使用文本挖掘的启发式方法:TF-IDF。IDF,逆向文件频率(inverse document frequency)是一个词语普遍重要性的度量    (不同词重要性的度量)。    fit(raw_documents, y=None):根据训练集生成词典和逆文档词频 由fit方法计算的每个特征的权重存储在model的idf_属性中。    transform(raw_documents, copy=True):使用fit(或fit_transform)学习的词汇和文档频率(df),将文档转换为文档 - 词矩阵。返回稀疏矩阵,[n_samples, n_features],即,Tf-idf加权文档矩阵(Tf-idf-weighted document-term matrix)。    transform根据fit的结果转换成目标形式,具体需深究代码实现。 https://zhuanlan.zhihu.com/p/42297868 https://blog.csdn.net/youhuakongzhi/article/details/90519801 https://www.cnblogs.com/xin-qing3/p/11187164.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3